In computer networks, a number of network stations are typically interconnected via a communications medium. For example, Ethernet 802.3 is a commonly used local area network (LAN) scheme in which multiple stations are connected to a shared or dedicated serial data path. These stations often communicate with a switch or some other network device located between the data path and the stations connected to that path. The switch typically controls the communication of packets and includes logic for receiving and forwarding packets to their appropriate destinations.
When congestion occurs in a conventional network switch, the switch typically takes some measures to prevent further congestion, such as dropping packets. To this extent, conventional switches usually employ flow control techniques to minimize the congestion in the switch. Flow control techniques may also be used for quality of service controls.
Conventional flow control techniques control the rate or volume of packets transmitted by the switch on a per-port basis. As a result, these techniques unnecessarily flow control all packets transmitted by a particular port even when a single flow (i.e., a series of packets or data frames belonging to a certain host and destination pair or belonging to a certain transport session between any two hosts) causes the congestion at the port.